﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Web.UI.HtmlControls;

namespace Tp2
{
    public partial class Factuation : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if ((Session["login"] == null) || (Session["panier"] == null))
            {
                Response.Redirect("default.aspx");
            }
            else if (IsPostBack)
            {
                Validate();

                if (Page.IsValid)
                {
                    Panier panier = (Panier)Session["panier"];


                    SqlCommand commandChamps;
                    SqlDataReader lecteurChamps;
                    SqlConnection connexionBD;

                    string cheminBD = Server.MapPath("App_Data/TP2.mdf");
                    string chaineConnexion = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + cheminBD + ";Integrated Security=True;User Instance=True";

                    connexionBD = new SqlConnection(chaineConnexion);
                    connexionBD.Open();

                    string Paiement;

                    if (Mastercard.Checked)
                    {
                        Paiement = "MasterCard";
                    }
                    else
                    {
                        Paiement = "Visa";
                    }

                    string requeteCommande = "INSERT INTO commandes (dateCommande, statut, paiement, no_client)" +
                        " VALUES ('" + DateTime.Now +
                        "', '" + "En livraison" +
                        "', '" + Paiement +
                        "', '" + NoClient.InnerHtml + "')";

                    commandChamps = new SqlCommand(requeteCommande, connexionBD);
                    lecteurChamps = commandChamps.ExecuteReader();

                    lecteurChamps.Close();

                    requeteCommande = "SELECT TOP 1 no FROM commandes ORDER BY no DESC";
                    commandChamps = new SqlCommand(requeteCommande, connexionBD);
                    lecteurChamps = commandChamps.ExecuteReader();

                    lecteurChamps.Read();
                    int noCommande = Convert.ToInt32(lecteurChamps["no"]);

                    lecteurChamps.Close();

                    foreach (Produit i in panier.Liste)
                    {
                        string requeteItemCommande = "INSERT INTO items_commande (no_commande, no_produit, qte)" +
                        " VALUES (" + noCommande +
                        ", " + i.NoProduit +
                        ", " + i.Quantite + ")";

                        commandChamps = new SqlCommand(requeteItemCommande, connexionBD);
                        commandChamps.ExecuteNonQuery();

                        String requeteProduit = "SELECT * FROM disques";

                        commandChamps = new SqlCommand(requeteProduit, connexionBD);
                        lecteurChamps = commandChamps.ExecuteReader();

                        while (lecteurChamps.Read())
                        {
                            if (lecteurChamps["noProduit"].ToString() == Convert.ToString(i.NoProduit))
                            {
                                int Asupprimer = Convert.ToInt32(lecteurChamps["qte"]);
                                Asupprimer -= i.Quantite;
                                String requeteSuppression = "UPDATE disques SET qte=" + Asupprimer.ToString() + " WHERE noProduit=" + lecteurChamps["noProduit"].ToString();

                                lecteurChamps.Close();
                                SqlCommand commandeSuppression = new SqlCommand(requeteSuppression, connexionBD);
                                commandeSuppression.ExecuteNonQuery();
                                
                                break;
                            }
                        }

                        panier.vider();
                        Session["panier"] = panier;
                        Response.Redirect("Merci.aspx");
                    }
                }
            }
            else if (Session["login"] != null)
            {
                SqlDataReader lecteurChamps;
                SqlCommand commandChamps;
                SqlConnection connexionBD;
                string cheminBD = Server.MapPath("App_Data/TP2.mdf");
                string chaineConnexion = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + cheminBD + ";Integrated Security=True;User Instance=True";

                connexionBD = new SqlConnection(chaineConnexion);
                connexionBD.Open();

                String requeteNoCLient = "SELECT * FROM clients WHERE login='" + Session["login"].ToString() + "'";

                commandChamps = new SqlCommand(requeteNoCLient, connexionBD);
                lecteurChamps = commandChamps.ExecuteReader();

                if (lecteurChamps.Read())
                {
                    if (Session["login"].ToString() == lecteurChamps["login"].ToString())
                    {
                        NoClient.InnerHtml = lecteurChamps["no"].ToString();
                        NomClient.InnerHtml = lecteurChamps["prenom"].ToString() + " " + lecteurChamps["nom"].ToString();
                        AdresseClient.InnerHtml = lecteurChamps["adresse"].ToString() + ", " + lecteurChamps["ville"].ToString();
                        CodePostalClient.InnerHtml = lecteurChamps["codePostal"].ToString();
                        txtNom.Value = lecteurChamps["nom"].ToString();
                        txtPrenom.Value = lecteurChamps["prenom"].ToString();
                        txtadresse.Value = lecteurChamps["adresse"].ToString();
                        txtCode.Value = lecteurChamps["codePostal"].ToString();
                        txtVille.Value = lecteurChamps["ville"].ToString();
                        selectProvince.Value = lecteurChamps["province"].ToString();
                    }
                }

                lecteurChamps.Close();

                Panier panierClient = (Panier)Session["panier"];

                ProduitDuClient.InnerHtml = "";
                double SousTotalFacture = 0;
                double TPSFacture = 0;
                double TVQFacture = 0;
                double TotalFacture = 0;

                foreach (Produit i in panierClient.Liste)
                {
                    String requeteProduit = "SELECT * FROM disques";

                    commandChamps = new SqlCommand(requeteProduit, connexionBD);
                    lecteurChamps = commandChamps.ExecuteReader();

                    while (lecteurChamps.Read())
                    {
                        if (lecteurChamps["noProduit"].ToString() == Convert.ToString(i.NoProduit))
                        {
                            string QuantitefoisArgent;
                            SousTotalFacture += i.Quantite * Convert.ToInt32(lecteurChamps["prix"]);

                            if (i.Quantite > 1)
                            {
                                QuantitefoisArgent = Convert.ToString(i.Quantite) + "x" + lecteurChamps["prix"].ToString();
                            }
                            else
                            {
                                QuantitefoisArgent = lecteurChamps["prix"].ToString();
                            }

                            ProduitDuClient.InnerHtml +=
                                "<p class=\"infoGauche\">" + lecteurChamps["titre"].ToString() + "</p><span class=\"infoDroite\" runat=\"server\">"
                                + QuantitefoisArgent + "$" + "</span><br />";
                        }
                    }

                    lecteurChamps.Close();
                }
                TPSFacture = SousTotalFacture * 0.05;
                TVQFacture = (SousTotalFacture + TPSFacture) * 0.095;
                TotalFacture = SousTotalFacture + TPSFacture + TVQFacture;

                SousTotal.InnerHtml = String.Format("{0:c}", SousTotalFacture);
                TPS.InnerHtml = String.Format("{0:c}", TPSFacture);
                TVQ.InnerHtml = String.Format("{0:c}", TVQFacture);
                Total.InnerHtml = String.Format("{0:c}", TotalFacture);


            }
        }

        protected void ValidationProvince(object source, ServerValidateEventArgs args)
        {
            if (selectProvince.SelectedIndex == 0)
            {
                validationProvince.ErrorMessage = "Choix de province obligatoire";
                args.IsValid = false;
            }
        }

        protected void validationDate_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (txtDate.Value.Length == 0)
            {

                validationDate.ErrorMessage = "Date d'expiration obligatoire";
                this.validationDate.SetFocusOnError = true;
                args.IsValid = false;
            }
            else
            {
                try
                {
                    DateTime aTester = Convert.ToDateTime(txtDate.Value);

                    if (aTester <= DateTime.Now)
                    {
                        validationDate.ErrorMessage = "Date d'expiration doit être plus grand que la date d'achat";
                        args.IsValid = false;
                    }
                }
                catch
                {
                    validationDate.ErrorMessage = "Format de date invalide";
                    args.IsValid = false;
                }
            }
        }
    }
}